from datetime import datetime

from models import db


class User(db.Model):
    """用户表"""
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)  # 用户id
    nick_name = db.Column(db.String(32), nullable=False)  # 用户昵称
    password_hash = db.Column(db.String(128), nullable=False)  # 用户密码的hash值
    phone = db.Column(db.String(11), unique=True, nullable=False)  # 用户的手机号
    avatar_url = db.Column(db.String(256))  # 用户头像的图片地址
    truth_name = db.Column(db.String(10))  # 用户真实名字
    gender = db.Column(db.Enum('男', '女'))  # 用户性别
    email = db.Column(db.String(100))  # 用户邮箱


class Product(db.Model):
    """商品表"""
    __tablename__ = 'product'

    id = db.Column(db.Integer, primary_key=True)  # 商品id
    product_name = db.Column(db.String(64), nullable=False)  # 商品名称
    introduce = db.Column(db.String(64), nullable=False)  # 商品介绍
    price = db.Column(db.String(10), nullable=False)  # 商品价格
    type = db.Column(db.Enum('fruit', 'vegetable'), nullable=False)  # 商品是水果还是蔬菜
    product_avatar = db.Column(db.String(128))  # 商品的图片地址
    address = db.Column(db.String(255), nullable=False)  # 产地
    like_user = db.relationship('User', secondary="shop_car", lazy='dynamic', backref='like_product')


class ShopCar(db.Model):
    """购物车表"""

    __tablename__ = 'shop_car'
    product_id = db.Column("product_id", db.Integer, db.ForeignKey("product.id"), primary_key=True)  # 商品编号
    user_id = db.Column("user_id", db.Integer, db.ForeignKey("user.id"), primary_key=True)  # 用户编号
    count = db.Column(db.String(3), default='1')  # 商品数量


class Areas(db.Model):
    __tablename__ = 'areas'
    aid = db.Column(db.Integer, nullable=False, primary_key=True)  # 自己的id
    atitle = db.Column(db.String(20))  # 地方的名字
    pid = db.Column(db.Integer)  # 表示哪个省的市或者哪个市的区


class ShopAddress(db.Model):
    __tablename__ = 'shop_address'
    id = db.Column(db.Integer, primary_key=True)  # 当前收货地址的id
    name = db.Column(db.String(10), nullable=False)  # 收货人姓名
    like_address = db.Column(db.String(100), nullable=False)  # 收货人地区
    address = db.Column(db.String(100), nullable=False)  # 收货人详细地址
    phone = db.Column(db.String(11), nullable=False)  # 收货人电话
    is_default = db.Column(db.Boolean, default=False)  # 是否是默认收货地址
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 当前收货地址是哪一个用户的
    user = db.relationship('User', backref=db.backref('shop_address', lazy='dynamic'))  # 调用用户反向关联调用地址


class Order(db.Model):
    __tablename__ = 'order'
    id = db.Column(db.Integer, primary_key=True)  # 订单的id
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 表示哪个用户的订单
    product_id = db.Column(db.String(255))  # 订单中的商品id列表
    express = db.Column(db.String(55))  # 快递方式
    comment = db.Column(db.String(60))  # 订单备注信息
    pay_money = db.Column(db.String(100))  # 实付金额
    status = db.Column(db.String(100))  # 物流状态信息
    order_num = db.Column(db.String(100), default='订单已生成，正在等待发货')  # 订单号
    order_date = db.Column(db.DateTime, default=datetime.now)  # 订单生成时间


class Collect(db.Model):
    __tablename__ = 'collect'
    collect_product = db.Column("collect_product", db.Integer, db.ForeignKey("product.id"), primary_key=True)
    collect_user = db.Column("collect_user", db.Integer, db.ForeignKey("user.id"), primary_key=True)
